#!/bin/bash
echo "===== 开始磁盘性能调优 ====="
# 错误处理机制
trap 'echo "脚本运行异常，退出状态为 $?"' EXIT
# 权限检查
if [ "$(id -u)" != 0 ]; then
    echo "请以root用户身份运行此脚本"
    exit 1
fi
# 记录开始时间
start_time=$(date +%s.%N)
# 收集系统信息
echo "=== 系统基本信息 ==="
uptime
free -h
df -h
iostat -d -x
netstat -i
# 网络参数优化
echo "=== 优化网络参数 ==="
sysctl -p /etc/sysctl.conf
if [ $? != 0 ]; then
    echo "网络参数配置失败，请检查文件和权限!"
    exit 1
fi
# 调整网卡队列长度
for nic in $(ls /sys/class/net/); do
    if [ "$nic" == "lo" ]; then continue
    echo 1000 > "/sys/class/net/$nic/queues/rx-queue/max_size"
    echo 1000 > "/sys/class/net/$nic/queues/tx-queue/max_size"
    if [ $? != 0 ]; then
        echo "调整网卡队列长度失败，请检查权限!"
        exit 1
    fi
done
# 磁盘I/O调优
echo "=== 调整磁盘I/O参数 ==="
for disk in $(ls /dev/sd* | grep -v 'sr'); do
    echo 0 > "${disk}/device/queue_depth"
    if [ $? != 0 ]; then
        echo "调整磁盘队列深度失败，请检查权限!"
        exit 1
    fi
done
# 网络连接状态监控
echo "=== 开始监控网络和磁盘性能 ==="
(fio --direct=1 --rw=randread --bs=4k --numjobs=8 --iodepth=64 --runtime=30s > fio_result.log 2>&1) &
fio_pid=$!
iostat -d -x -o 1 > iostat_result.log
netstat -i -t 5 > netstat_result.log
# 收集性能数据
echo "=== 收集性能数据完成 ==="
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc)
# 验证调优效果
echo "=== 验证优化效果 ==="
fio_valid=$(grep "latency mean" fio_result.log | awk '{print $3}')
iostat_valid=$(iostat -d -x | grep sda | awk '{print $(NF-1)}')
netstat_valid=$(netstat -i | grep eth0 | awk '{print $8}')
# 结构化输出
echo "===== 性能指标对比 ====="
echo "总执行时间: ${duration}秒"
echo "FIO验证结果: ${fio_valid}"
echo "Iostat验证结果: ${iostat_valid}"
echo "Netstat验证结果: ${netstat_valid}"
# 结构化输出性能指标
echo "{
    \"total_time\": \"$duration\",
    \"fio_latency_mean\": \"$fio_valid\",
    \"iostat_iops\": \"$iostat_valid\",
    \"netstat_bandwidth\": \"$netstat_valid\"
}"